/**
 *
 * @param callBack 回调方法
 */
function Sleep(callBack) {
  setTimeout(callBack, 1500);
}
/**
 * 弹框
 */
const Toast = {
  success(text, interval = 2000) {
    return wx.showToast({
      title: text,
      icon: "success",
      duration: interval
    })
  },
  loading(text, interval = 2000) {
    return wx.showToast({
      title: text,
      icon: "loading",
      duration: interval
    })
  },
  none(text, interval = 2000) {
    return wx.showToast({
      title: text,
      icon: "none",
      duration: interval
    })
  }
}
/**
 * 防抖 应用于hook写法，类写法用装饰器@debounce(wait) 适用与input
 * @param func
 * @param wait
 */
function Debounce(fn, interval = 1000) {
  let timer;
  const gapTime = interval;// 间隔时间，如果interval不传，则默认1000ms
  return function () {
    clearTimeout(timer);
    const context = this;
    // eslint-disable-next-line prefer-rest-params
    const args = arguments[0];// 保存此处的arguments，因为setTimeout是全局的，arguments不是防抖函数需要的。
    timer = setTimeout(() => {
      fn.call(context, args);
    }, gapTime);
  };
}
function dateFormat(timestamp, format) {
  // :ss
  format = format == null ? 'yyyy-MM-dd hh:mm:ss' : format
  const date = new Date(timestamp)
  const o = {
    'M+': date.getMonth() + 1, // month
    'd+': date.getDate(), // day
    'h+': date.getHours(), // hour
    'm+': date.getMinutes(), // minute
    's+': date.getSeconds(), // second
    'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
    S: date.getMilliseconds() // millisecond
  }
  const week = [
    '星期日',
    '星期一',
    '星期二',
    '星期三',
    '星期四',
    '星期五',
    '星期六'
  ]
  if (/(y+)/.test(format)) {
    format = format.replace(
      RegExp.$1,
      (String(date.getFullYear())).substr(4 - RegExp.$1.length)
    )
  }
  if (/(w+)/.test(format)) {
    format = format.replace(RegExp.$1, week[date.getDay()])
  }
  for (const k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ?
          o[k] :
          ('00' + o[k]).substr((String(o[k])).length)
      )
    }
  }
  return format
}
/* 函数节流 */
function throttle(fn, interval = 2000) {
  let enterTime = 0;// 触发的时间
  const gapTime = interval;// 间隔时间，如果interval不传，则默认300ms
  return function () {
    const context = this;
    const backTime = new Date();// 第一次函数return即触发的时间
    if (backTime - enterTime > gapTime) {
      // eslint-disable-next-line prefer-rest-params
      fn.call(context, arguments);
      enterTime = backTime;// 赋值给第一次触发的时间，这样就保存了第二次触发的时间
    }
  }
}
function changeTime(res) {
  const newTime = `${res.substring(0, 10)} ${res.substring(11, 19)}`
  return newTime
}
/**
 * 保存图片到相册
 * @param {*} imgUrl 
 * @param {*} type 图片类型 1本地 2网络
 */
function downImg(imgUrl, type = 1) {
  const func1 = function (newUrl) {
    wx.saveImageToPhotosAlbum({
      filePath: newUrl,
      success() {
        wx.showToast({
          title: '保存成功',
          duration: 1500
        })
      }
    });
  }
  const func2 = function (newUrl) {
    wx.downloadFile({
      url: newUrl,
      success(res) {
        if (res.statusCode === 200) {
          func1(res.tempFilePath)
        }
      }
    });
  }
  /** 检测用户是否授权**/
  wx.getSetting({
    success(res) {
      /** 授权，则调用相册**/
      if (res.authSetting['scope.writePhotosAlbum'] === true) {
        type === 1 ? func1(imgUrl) : func2(imgUrl)
      } else if (res.authSetting['scope.writePhotosAlbum'] === false) {
        /** 未授权，则打开授权页面，让用户授权**/
        wx.openSetting({
          success(val) {
            console.log(val, "s")
            /** 授权成功，则保存图片，失败则不保存**/
            if (val.authSetting['scope.writePhotosAlbum'] === true) {

              type === 1 ? func1(imgUrl) : func2(imgUrl)
            }
          }
        });
      } else {
        type === 1 ? func1(imgUrl) : func2(imgUrl)
      }
    }
  });
}
/**
 * 多张网络图同时下载，顺序不变
 * @param imgUrl 
 */
function localityImg(imgList) {
  return Promise.all(imgList.map(item =>
    new Promise((resolve, reject) => {
      wx.downloadFile({
        url: item,
        success(val) {
          if (val.statusCode === 200) {
            resolve(val.tempFilePath)
          }
        }, fail(err) {
          reject(err)
        }
      });
    })
  ))
}
export default {
  Debounce,
  Toast,
  Sleep,
  throttle,
  dateFormat,
  changeTime,
  downImg,
  localityImg
}
